package cn.tedu.csmall.product.webapi.mapper;

import cn.tedu.csmall.pojo.entity.Category;
import cn.tedu.csmall.pojo.vo.CategoryDetailsVO;
import cn.tedu.csmall.pojo.vo.CategorySimpleListItemVO;
import cn.tedu.csmall.pojo.vo.CategorySimpleVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 处理类别数据的持久层接口
 */
@Repository
public interface CategoryMapper {

    /**
     * 插入“类别”数据
     * @param category
     * @return 受影响行数
     */
    int insert(Category category);

    /**
     * 根据“id”删除类别
     * @param id
     * @return
     */
    int delete(Long id);

    /**
     * 根据类别id修改基本信息
     * @param id
     * @return
     */
    int updateBaseInfoById(@Param("id") Long id,@Param("name") String name,
                           @Param("keywords") String keywords,@Param("sort") Integer sort,
                           @Param("icon") String icon);

    /**
     * 根据“类别id” 修改 “是否为父级类别”
     * @param id
     * @param isParent 是否为父级类别 1=是 0=否
     * @return
     */
    int updateIsParentById(@Param("id") Long id , @Param("isParent") Integer isParent);

    /**
     * 根据”类别id“ 修改 ”是否启用“
     * @param id
     * @param enable
     * @return
     */
    int updateEnableById(@Param("id") Long id , @Param("enable") Integer enable );

    /**
     * 根据”类别id“ 修改 ”是否显示“
     * @param id
     * @param isDisplay
     * @return
     */
    int updateIsDisplayById(@Param("id") Long id , @Param("isDisplay") Integer isDisplay );

    /**
     * 根据父级id查询同级数量
     * @param parentId
     * @return
     */
    int getCountByParentId(Long parentId);

    /**
     * 根据名称判断类别相同名称数量
     * @param name
     * @return
     */
    int getCountByName(String name);

    /**
     * 根据名称获取“类别”简单信息
     * @param name
     * @return
     */
    CategorySimpleVO getByName(String name);

    /**
     * 根据id获取“类别”信息
     * @param id
     * @return
     */
    CategorySimpleVO getById(Long id);

    /**
     * 根据parentId获取“子集类别”简单信息
     * @param parentId
     * @return
     */
    List<CategorySimpleListItemVO> listByParentId(Long parentId);

    /**
     * 根据id获取“类别”详细信息
     * @param id
     * @return
     */
    CategoryDetailsVO getDetailsById(Long id);

    /**
     * 查询所有“类别”
     * @return 所有“类别”的列表
     */
    List<CategoryDetailsVO> list();
}
